package socket.example3;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author lhn
 * @date 2024-04-22 14:43
 * 使用字符流
 */

public class SocketTCP03Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端-端口9999等待连接...");
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();

        //使用字符流，使用InputStreamReader 将inputStream字节流转成字符流
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream)
        );
        String str = bufferedReader.readLine();
        System.out.println(str);
        OutputStream outputStream = socket.getOutputStream();

        //使用字符流写入数据通道
        //OutputStreamWriter是从字符流到字节流的桥接
        //1、字符的输出需要通过字符流来操作，但是本质最后还是通过字节流输出到计算机上进行存储的
        //2、 因此OutputStreamWriter流的作用就是利用字节流作为底层输出流然后构建字符输出流，
        // 字符输出流输出字符到流中，然后通过指定的字符集把流中的字符编码成字节输出到字节流中，
        // 其作用就是一个桥梁，使得双方链接起来
        BufferedWriter bufferedWriter = new BufferedWriter(
                new OutputStreamWriter(outputStream)
        );
        bufferedWriter.write("hello, client 字符流");
        bufferedWriter.newLine();   //插入一个换行符，表示写入的内容结束，要求对方使用readLine
        bufferedWriter.flush(); //使用flush将缓冲区中的内容写入

        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();
    }
}
